package cn.com.bluemoon.daps.sync.service;

import cn.com.bluemoon.daps.common.domain.UserInfoHolder;
import cn.com.bluemoon.daps.common.enums.BmStatus;
import cn.com.bluemoon.daps.sync.vo.applypublish.ApplyPublishParam;
import cn.com.bluemoon.daps.sync.vo.applypublish.ApplyPublishResultVo;

public interface DapModelApplyPublishService {
    /**
     * 对比前校验接口
     *
     * @param modelId       模型id
     * @param newVsOld      新vs旧 ？
     * @param forceOverride 是否强制拉取对比且覆盖上一次对比结果，true是 false否，默认为false
     * @param userInfo      申请人
     * @return 用户
     */
    ApplyPublishResultVo modelTableLayerPredicate(String modelId,
                                                  Boolean newVsOld, Boolean forceOverride,
                                                  UserInfoHolder.UserInfo userInfo);

    /**
     * 对比最新模型数据与上一个版本数据的差异数据
     * 用于入库到发布同步中
     *
     * @param modelId       模型id
     * @param newVsOld      新vs旧 ？
     * @param forceOverride 是否强制拉取对比且覆盖上一次对比结果，true是 false否，默认为false
     * @param userInfo      申请人
     * @return 用户
     */
    ApplyPublishResultVo compareModelVersion(String modelId,
                                             boolean newVsOld,
                                             Boolean forceOverride, UserInfoHolder.UserInfo userInfo);

    /**
     * 申请发布通过-
     *
     * @param apply 发布内容
     */
    void applyConfirmPass(ApplyPublishParam apply, UserInfoHolder.UserInfo userInfo);

    /**
     * 申请发布动作进行修改同步任务数据
     *
     * @param apply 发布内容
     */
    void updateTaskStatusByApplyAction(ApplyPublishParam apply, BmStatus bmStatus, UserInfoHolder.UserInfo userInfo);

    /**
     * 申请发布 草稿撤销
     *
     * @param apply 发布内容
     */
    void applyUnPass(ApplyPublishParam apply, UserInfoHolder.UserInfo userInfo);

    /**
     * 申请发布不通过
     */
    void applyConfirmUnPass(ApplyPublishParam apply, UserInfoHolder.UserInfo userInfo);
}
